/**
 * Dep类的作用是一个依赖收集器，使用发布订阅模式，当数据发生变化时，
 * 会循环依赖列表，把所有的watcher都通知一遍。
 */

var uid = 0
export default class Dep {
  constructor() {
    // console.log('我是Dep的构造器')
    this.id = uid++
    // 定义数组存储自己的订阅者（Watcher的实例），subs是单词subscribes订阅者的简写
    this.subs = []
  }
  // 添加订阅
  addSub(sub) {
    this.subs.push(sub)
  }
  // 添加依赖
  depend() {
    // Dep.target就是一个我们自己指定的全局的位置，你用window.target也行，只要是全局唯一，没有歧义就行
    if (Dep.target) {
      this.addSub(Dep.target)
    }
  }
  // 通知更新
  notify() {
    console.log('我是notify')
    // 浅克隆一份
    const subs = this.subs.slice()
    // 遍历
    for (let i = 0, l = subs.length; i < l; i++) {
      subs[i].update()
    }
  }
}
